In diesem Artikel werde ich erläutern, wie Sie die Protokollebene Ihrer Anwendung ändern können, ohne Ihre Anwendung neu starten zu müssen.
Protokollebenen werden normalerweise in der Reihenfolge ihrer Wichtigkeit betrachtet: Aktivieren Sie „unwichtige“ Ebenen in der Entwicklung (Hinweis, Debug usw.), aktivieren Sie jedoch nur die „wichtigsten“ Ebenen (Warnung, Fehler usw.). Produktion, wo Ressourcen wie CPU-Zeit und Speicherplatz kostbar sind.
Aber was ist, wenn Ihre Anwendung auf der Ebene „FEHLER“ ausgeführt wird und Sie mit vielen Problemen konfrontiert werden, Sie es aber anhand der Protokolle auf Fehlerebene nicht herausfinden können? Das Ändern der Protokollebene durch eine erneute Bereitstellung der Anwendung wird viel Zeit und Ressourcen in Anspruch nehmen.
Darüber hinaus wird die Ausführung Ihrer Anwendung auf der INFO- oder DEBUG-Ebene in der Produktion eine große Anzahl von Protokollen generieren, die das Protokollierungssystem überlasten können, was zu erhöhten E/A-Vorgängen und Ressourcenverbrauch führt.
Um uns vor diesen Problemen zu bewahren, bietet GoFr - The Ultimate Golang Framework eine sichere Möglichkeit, die Protokollebene zu ändern, ohne Ihre Anwendung neu starten zu müssen.
Um die Protokollebene zu ändern, erfordert jede GoFr-Anwendung die folgende Konfiguration:
REMOTE_LOG_URL=(e.g., https://log-service.com/log-levels?id=1)
GoFr ruft den bereitgestellten Endpunkt standardmäßig alle 15 Sekunden ab, um die neueste Protokollebene zu erhalten. Dieses Intervall kann durch Hinzufügen der folgenden Konfiguration erhöht oder verringert werden.
REMOTE_LOG_FETCH_INTERVAL=(default: 15)
GoFr benötigt die Antwort von der URL im folgenden Format mit zwei Pflichtfeldern:
{ "data": { "serviceName": "test-service", "logLevel": "DEBUG" } }
Lassen Sie uns den Protokollebenendienst erstellen, der unserer Anwendung die Protokollebene bereitstellt.
Ich werde GoFr verwenden, um den Dienst zu erstellen. Weitere Informationen finden Sie in der Dokumentation.
Wir werden MySQL als Datenbank verwenden. Um MySQL hinzuzufügen, fügen Sie die folgenden Konfigurationen in der .env-Datei im Konfigurationsverzeichnis hinzu.
DB_HOST=localhost DB_USER=root DB_PASSWORD=password DB_NAME=log-level DB_PORT=2001 DB_DIALECT=mysql
Um den MySQL-Docker-Container auszuführen, führen Sie den folgenden Befehl aus
docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30
Fügen wir die Datei main.go mit Migrationen hinzu, um eine Tabelle zu erstellen, und wir verwenden die AddRESTHandler-Funktion, um die Route zu registrieren.
main.go
package main import ( "gofr.dev/pkg/gofr" "gofr.dev/pkg/gofr/migration" ) const createTable = `CREATE TABLE level ( id INT PRIMARY KEY, service_name VARCHAR(255) NOT NULL, log_level VARCHAR(50) NOT NULL ); ` func createTableLevel() migration.Migrate { return migration.Migrate{ UP: func(d migration.Datasource) error { _, err := d.SQL.Exec(createTable) if err != nil { return err } return nil }, } } type Level struct { ID int `json:"id"` ServiceName string `json:"serviceName"` LogLevel string `json:"logLevel"` } func (u *Level) RestPath() string { return "level" } func main() { app := gofr.New() app.Migrate(map[int64]migration.Migrate{1: createTableLevel()}) err := app.AddRESTHandlers(&Level{}) if err != nil { app.Logger().Fatalf("Failed to register routes for level struct: %v", err) } app.Run() }
Nachdem wir den Protokolldienst ausgeführt haben, sehen wir die folgenden Protokolle:
Wir haben alle REST-Routen registriert.
Um einen Dienst zu erstellen, senden Sie die folgende Anfrage:
curl --location 'localhost:8000/level' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"INFO", "serviceName":"gofr-app" }'
Um die Protokollebene zu aktualisieren, senden Sie die folgende Anfrage:
curl --location --request PUT 'localhost:8000/level/1' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"DEBUG", "serviceName":"gofr-app" }'
Um die Protokollebene abzurufen, senden Sie die folgende Anfrage:
curl --location 'localhost:8000/level/1'
Dieselbe URL wird in den Konfigurationen unserer Anwendung verwendet, deren Protokollebene remote geändert werden muss.
Durch die Verwendung der GoFr-Funktion zur Remote-Protokollebenenänderung erhalten Sie Vorteile wie:
Mühelose Anpassungen:
Ändern Sie die Protokollebene jederzeit, ohne die Anwendung neu starten zu müssen. Dies ist insbesondere bei der Fehlerbehebung hilfreich.
Verbesserte Sichtbarkeit:
Wechseln Sie ganz einfach zu einer detaillierteren Protokollebene (z. B. DEBUG), um tiefere Einblicke in bestimmte Probleme zu erhalten, und wechseln Sie dann für den regulären Betrieb wieder zu einer weniger detaillierten Ebene (z. B. INFO).
Verbesserte Leistung:
Das Generieren einer großen Anzahl von Protokollen kann das Protokollierungssystem überlasten, was zu erhöhten E/A-Vorgängen und Ressourcenverbrauch führt. Durch den Wechsel zur Warn- oder Fehlerebene wird die Anzahl der Protokolle verringert, die Leistung verbessert und CLOUD-KOSTEN REDUZIEREN.
Unterstützen Sie GoFr, indem Sie einen ⭐Stern vergeben: https://github.com/gofr-dev/gofr
Darüber hinaus haben Sie Zugriff auf den kostenlosen öffentlichen Endpunkt, um die Spuren Ihrer Anwendung zu exportieren und anzuzeigen @tracer.gofr.dev.
Um es zu aktivieren, fügen Sie die folgende Konfiguration in Ihre .env-Datei ein
TRACE_EXPORTER=gofr
Andere Vorteile:
Wenn Sie einen Beitrag zu GOFR leisten, sei es in der Entwicklung oder beim Schreiben von Artikeln. Sie können kostenlose Swags (T-Shirts, Aufkleber) erhalten, indem Sie das Formular auf GitHub Readme (unten) ausfüllen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3